package principle.lsp.before;

/**
 * @version v1.0
 * @ClassName: RectangleDemo
 * @Description: TODO(一句话描述该类的功能)
 * @Author: 黑马程序员
 */
public class RectangleDemo {

    public static void main(String[] args) {
        //创建长方形对象
        Rectangle r = new Rectangle();
        //设置长和宽
        r.setLength(20);
        r.setWidth(10);
        //调用resize方法进行扩宽
        resize(r);
        printLengthAndWidth(r);

        System.out.println("==================");
        //创建正方形对象
        Square s = new Square();
        //设置长和宽
        s.setLength(10);
        //调用resize方法进行扩宽
        resize(s);
        printLengthAndWidth(s);
    }

    /**
     * 扩宽方法,该方法要实现一个功能，即宽比长要大，长方形的时候不会报错，但是正方形的时候，由于重写了setWidth方法，会导致无限循环。
     * 由于正方形继承了长方形，因此正方形也可以调用resize(Rectangle rectangle)方法。
     * 从而说明了里氏替换的重要性，即不要轻易重写父类的方法，可能导致未知的错误
     * @param rectangle
     */
    public static void resize(Rectangle rectangle) {
        //判断宽如果比长小，进行扩宽的操作
        while(rectangle.getWidth() <= rectangle.getLength()) {
            rectangle.setWidth(rectangle.getWidth() + 1);
        }
    }

    //打印长和宽
    public static void printLengthAndWidth(Rectangle rectangle) {
        System.out.println(rectangle.getLength());
        System.out.println(rectangle.getWidth());
    }
}
